<script setup>
import { ref } from "vue";
// 声明一个 响应式的 变量
const todo = ref("");
// 声明一个 响应式的 数组变量
const todoList = ref([
  // {
  //   id: 1,
  //   title: "吃饭",
  //   done: false,
  // },
  // {
  //   id: 2,
  //   title: "睡觉",
  //   done: true,
  // },
]);

// 声明一个 按钮的回调
const addTodo = () => {
  todoList.value = [
    ...todoList.value,
    {
      id: todoList.value.length + 1,
      title: todo.value,
      done: false,
    },
  ];

  todo.value = "";
};

const toggleTodo = (selectedId) => {
  // 从数组中找到 id 等于 selectedId 那一项
  const match = todoList.value.find((todo) => todo.id === selectedId);
  // 然后把 done 属性 取反
  match.done = !match.done;
};
</script>

<template>
  <div class="header">
    <h2>My To Do List</h2>
    <input
      type="text"
      id="myInput"
      placeholder="请输入你的待办事项标题"
      v-model="todo"
    />
    <span @click="addTodo" class="addBtn">Add</span>
  </div>

  <!-- <ul>
    <li>Hit the gym <span>X</span></li>
    <li class="checked">Pay bills</li>
  </ul> -->

  <ul>
    <li
      :key="todo.id"
      v-for="todo in todoList"
      :class="{ checked: todo.done }"
      @click="toggleTodo(todo.id)"
    >
      {{ todo.title }} <span v-if="!todo.done">X</span>
    </li>
  </ul>
</template>

<style scoped>
* {
  box-sizing: border-box;
}

/* Remove margins and padding from the list */
ul {
  margin: 0;
  padding: 0;
}

/* Style the list items */
ul li {
  cursor: pointer;
  position: relative;
  padding: 12px 8px 12px 40px;
  background: #eee;
  font-size: 18px;
  transition: 0.2s;

  /* make the list items unselectable */
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}

ul li > span {
  border: 1px solid black;
  display: inline-block;
  text-align: center;
  width: 2rem;
  position: absolute;
  right: 1rem;
}

ul li > span:hover {
  background-color: red;
}

/* Set all odd list items to a different color (zebra-stripes) */
ul li:nth-child(odd) {
  background: #f9f9f9;
}

/* Darker background-color on hover */
ul li:hover {
  background: #ddd;
}

/* When clicked on, add a background color and strike out text */
ul li.checked {
  background: #888;
  color: #fff;
  text-decoration: line-through;
}

/* Add a "checked" mark when clicked on */
ul li.checked::before {
  content: "";
  position: absolute;
  border-color: #fff;
  border-style: solid;
  border-width: 0 2px 2px 0;
  top: 10px;
  left: 16px;
  transform: rotate(45deg);
  height: 15px;
  width: 7px;
}

/* Style the close button */
.close {
  position: absolute;
  right: 0;
  top: 0;
  padding: 12px 16px 12px 16px;
}

.close:hover {
  background-color: #f44336;
  color: white;
}

/* Style the header */
.header {
  background-color: #f44336;
  padding: 30px 40px;
  color: white;
  text-align: center;
}

/* Clear floats after the header */
.header:after {
  content: "";
  display: table;
  clear: both;
}

/* Style the input */
input {
  margin: 0;
  border: none;
  border-radius: 0;
  width: 75%;
  padding: 10px;
  float: left;
  font-size: 16px;
}

/* Style the "Add" button */
.addBtn {
  padding: 10px;
  width: 25%;
  background: #d9d9d9;
  color: #555;
  float: left;
  text-align: center;
  font-size: 16px;
  cursor: pointer;
  transition: 0.3s;
  border-radius: 0;
}

.addBtn:hover {
  background-color: #bbb;
}
</style>
